package com.honghe.system.mapper;

import java.util.List;
import java.util.Map;
import com.honghe.system.domain.CustomerContactRecord;
import com.honghe.system.domain.BankCustomerCases;
import com.honghe.system.domain.vo.CustomerContactStatsVO;
import org.apache.ibatis.annotations.Param;

/**
 * 客户联系记录Mapper接口
 * 
 * @author honghe
 */
public interface CustomerContactRecordMapper 
{
    /**
     * 查询客户联系记录
     * 
     * @param recordId 客户联系记录主键
     * @return 客户联系记录
     */
    public CustomerContactRecord selectCustomerContactRecordByRecordId(Long recordId);

    /**
     * 查询客户联系记录列表
     * 
     * @param customerContactRecord 客户联系记录
     * @return 客户联系记录集合
     */
    public List<CustomerContactRecord> selectCustomerContactRecordList(CustomerContactRecord customerContactRecord);

    /**
     * 根据客户ID查询联系记录列表
     * 
     * @param caseId 客户ID
     * @return 客户联系记录集合
     */
    public List<CustomerContactRecord> selectCustomerContactRecordByCaseId(String caseId);

    /**
     * 新增客户联系记录
     * 
     * @param customerContactRecord 客户联系记录
     * @return 结果
     */
    public int insertCustomerContactRecord(CustomerContactRecord customerContactRecord);

    /**
     * 修改客户联系记录
     * 
     * @param customerContactRecord 客户联系记录
     * @return 结果
     */
    public int updateCustomerContactRecord(CustomerContactRecord customerContactRecord);

    /**
     * 删除客户联系记录
     * 
     * @param recordId 客户联系记录主键
     * @return 结果
     */
    public int deleteCustomerContactRecordByRecordId(Long recordId);

    /**
     * 批量删除客户联系记录
     * 
     * @param recordIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteCustomerContactRecordByRecordIds(Long[] recordIds);

    /**
     * 根据客户ID查询客户信息
     * 
     * @param caseId 客户ID
     * @return 客户信息
     */
    public BankCustomerCases selectCustomerByCaseId(String caseId);
    
    /**
     * 查询用户有权限查看的客户列表（负责人或经办人是当前用户）
     * 
     * @param username 用户名
     * @return 客户信息集合
     */
    public List<BankCustomerCases> selectCustomersByUsername(String username);

    /**
     * 查询联系记录列表
     */
    public List<CustomerContactRecord> selectContactList(CustomerContactStatsVO customerContactStats);

    /**
     * 获取总联系次数
     */
    public Integer selectTotalContacts(CustomerContactStatsVO customerContactStats);

    /**
     * 获取本月联系次数
     */
    public Integer selectMonthlyContacts(CustomerContactStatsVO customerContactStats);

    /**
     * 计算平均联系频率
     */
    public Double selectAverageFrequency(CustomerContactStatsVO customerContactStats);

    /**
     * 获取活跃客户数
     */
    public Integer selectActiveCustomers(CustomerContactStatsVO customerContactStats);

    /**
     * 获取联系趋势数据
     */
    public List<Map<String, Object>> selectContactTrend(CustomerContactStatsVO customerContactStats);

    /**
     * 获取联系方式分布
     */
    public List<Map<String, Object>> selectContactTypeDistribution(CustomerContactStatsVO customerContactStats);

    /**
     * 查询负责人联系记录统计数据
     *
     * @param customerContactStats 查询参数
     * @return 统计列表
     */
    List<Map<String, Object>> selectHandlerContactStats(CustomerContactStatsVO customerContactStats);

    /**
     * 查询负责人联系记录趋势数据
     *
     * @param params 查询参数
     * @return 趋势数据
     */
    List<Map<String, Object>> selectHandlerContactTrends(Map<String, Object> params);

    /**
     * 查询月度联系总量趋势
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 联系总量趋势数据
     */
    public List<Map<String, Object>> selectContactVolumeByMonth(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 查询季度联系总量趋势
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 联系总量趋势数据
     */
    public List<Map<String, Object>> selectContactVolumeByQuarter(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 查询半年联系总量趋势
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 联系总量趋势数据
     */
    public List<Map<String, Object>> selectContactVolumeByHalfYear(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 查询年度联系总量趋势
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 联系总量趋势数据
     */
    public List<Map<String, Object>> selectContactVolumeByYear(@Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 查询自定义时间范围联系总量趋势
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 联系总量趋势数据
     */
    public List<Map<String, Object>> selectContactVolumeByCustom(@Param("startDate") String startDate, @Param("endDate") String endDate);
} 